home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Programming / fpc / amigaunits / locale.pas < prev    next >
Pascal/Delphi Source File  |  1998-09-22  |  19KB  |  629 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 1998 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16.  
  17. UNIT locale;
  18.  
  19. INTERFACE
  20. USES exec, amigados, utility;
  21.  
  22. const
  23. { constants for GetLocaleStr() }
  24.  DAY_1          = 1;       { Sunday    }
  25.  DAY_2          = 2;       { Monday    }
  26.  DAY_3          = 3;       { Tuesday   }
  27.  DAY_4          = 4;       { Wednesday }
  28.  DAY_5          = 5;       { Thursday  }
  29.  DAY_6          = 6;       { Friday    }
  30.  DAY_7          = 7;       { Saturday  }
  31.  
  32.  ABDAY_1        = 8 ;      { Sun }
  33.  ABDAY_2        = 9 ;      { Mon }
  34.  ABDAY_3        = 10;      { Tue }
  35.  ABDAY_4        = 11;      { Wed }
  36.  ABDAY_5        = 12;      { Thu }
  37.  ABDAY_6        = 13;      { Fri }
  38.  ABDAY_7        = 14;      { Sat }
  39.  
  40.  MON_1          = 15;      { January   }
  41.  MON_2          = 16;      { February  }
  42.  MON_3          = 17;      { March     }
  43.  MON_4          = 18;      { April     }
  44.  MON_5          = 19;      { May       }
  45.  MON_6          = 20;      { June      }
  46.  MON_7          = 21;      { July      }
  47.  MON_8          = 22;      { August    }
  48.  MON_9          = 23;      { September }
  49.  MON_10         = 24;      { October   }
  50.  MON_11         = 25;      { November  }
  51.  MON_12         = 26;      { December  }
  52.  
  53.  ABMON_1        = 27;      { Jan }
  54.  ABMON_2        = 28;      { Feb }
  55.  ABMON_3        = 29;      { Mar }
  56.  ABMON_4        = 30;      { Apr }
  57.  ABMON_5        = 31;      { May }
  58.  ABMON_6        = 32;      { Jun }
  59.  ABMON_7        = 33;      { Jul }
  60.  ABMON_8        = 34;      { Aug }
  61.  ABMON_9        = 35;      { Sep }
  62.  ABMON_10       = 36;      { Oct }
  63.  ABMON_11       = 37;      { Nov }
  64.  ABMON_12       = 38;      { Dec }
  65.  
  66.  YESSTR         = 39;      { affirmative response for yes/no queries }
  67.  NOSTR          = 40;      { negative response for yes/no queries    }
  68.  
  69.  AM_STR         = 41;      { AM }
  70.  PM_STR         = 42;      { PM }
  71.  
  72.  SOFTHYPHEN     = 43;      { soft hyphenation }
  73.  HARDHYPHEN     = 44;      { hard hyphenation }
  74.  
  75.  OPENQUOTE      = 45;      { start of quoted block }
  76.  CLOSEQUOTE     = 46;      { end of quoted block   }
  77.  
  78.  YESTERDAYSTR   = 47;      { Yesterday }
  79.  TODAYSTR       = 48;      { Today     }
  80.  TOMORROWSTR    = 49;      { Tomorrow  }
  81.  FUTURESTR      = 50;      { Future    }
  82.  
  83.  MAXSTRMSG      = 51;      { current number of defined strings }
  84.  
  85.  
  86. {***************************************************************************}
  87.  
  88. Type
  89. { OpenLibrary("locale.library",0) returns a pointer to this structure }
  90.  pLocaleBase = ^tLocaleBase;
  91.  tLocaleBase = record
  92.     lb_LibNode      : tLibrary;
  93.     lb_SysPatches   : Boolean;   { TRUE if locale installed its patches }
  94.  end;
  95.  
  96. {***************************************************************************}
  97.  
  98. Type
  99. { This structure must only be allocated by locale.library and is READ-ONLY! }
  100.  pLocale = ^tLocale;
  101.  tLocale = record
  102.     loc_LocaleName,                         { locale's name               }
  103.     loc_LanguageName    : STRPTR;           { language of this locale     }
  104.     loc_PrefLanguages   : Array[0..9] of STRPTR;    { preferred languages }
  105.     loc_Flags           : ULONG;            { always 0 for now            }
  106.  
  107.     loc_CodeSet,                            { always 0 for now            }
  108.     loc_CountryCode,                        { user's country code         }
  109.     loc_TelephoneCode,                      { country's telephone code    }
  110.     loc_GMTOffset       : ULONG;            { minutes from GMT            }
  111.     loc_MeasuringSystem,                    { what measuring system?      }
  112.     loc_CalendarType    : Byte;             { what calendar type?         }
  113.     loc_Reserved0       : Array[0..1] of Byte;
  114.  
  115.     loc_DateTimeFormat,                     { regular date & time format  }
  116.     loc_DateFormat,                         { date format by itself       }
  117.     loc_TimeFormat,                         { time format by itself       }
  118.  
  119.     loc_ShortDateTimeFormat,                { short date & time format    }
  120.     loc_ShortDateFormat,                    { short date format by itself }
  121.     loc_ShortTimeFormat,                    { short time format by itself }
  122.  
  123.     { for numeric values }
  124.     loc_DecimalPoint,                       { character before the decimals }
  125.     loc_GroupSeparator,                     { separates groups of digits    }
  126.     loc_FracGroupSeparator : STRPTR;        { separates groups of digits    }
  127.     loc_Grouping,                           { size of each group            }
  128.     loc_FracGrouping    : Pointer;          { size of each group            }
  129.  
  130.     { for monetary values }
  131.     loc_MonDecimalPoint,
  132.     loc_MonGroupSeparator,
  133.     loc_MonFracGroupSeparator : STRPTR;
  134.     loc_MonGrouping,
  135.     loc_MonFracGrouping : Pointer;
  136.     loc_MonFracDigits,                      { digits after the decimal point   }
  137.     loc_MonIntFracDigits : Byte;            { for international representation }
  138.     loc_Reserved1       : Array[0..1] of Byte;
  139.  
  140.     { for currency symbols }
  141.     loc_MonCS,                              { currency symbol              }
  142.     loc_MonSmallCS,                         { symbol for small amounts     }
  143.     loc_MonIntCS        : STRPTR;           { internationl (ISO 4217) code }
  144.  
  145.     { for positive monetary values }
  146.     loc_MonPositiveSign : STRPTR;           { indicate positive money value   }
  147.     loc_MonPositiveSpaceSep,                { determine if separated by space }
  148.     loc_MonPositiveSignPos,                 { position of positive sign       }
  149.     loc_MonPositiveCSPos,                   { position of currency symbol     }
  150.     loc_Reserved2       : Byte;
  151.  
  152.     { for negative monetary values }
  153.     loc_MonNegativeSign : STRPTR;           { indicate negative money value   }
  154.     loc_MonNegativeSpaceSep,                { determine if separated by space }
  155.     loc_MonNegativeSignPos,                 { position of negative sign       }
  156.     loc_MonNegativeCSPos,                   { position of currency symbol     }
  157.     loc_Reserved3       : Byte;
  158.  end;
  159.  
  160. const
  161. { constants for Locale.loc_MeasuringSystem }
  162.  MS_ISO         = 0;       { international metric system }
  163.  MS_AMERICAN    = 1;       { american system             }
  164.  MS_IMPERIAL    = 2;       { imperial system             }
  165.  MS_BRITISH     = 3;       { british system              }
  166.  
  167. { constants for Locale.loc_CalendarType }
  168.  CT_7SUN        = 0;       { 7 days a week, Sunday is the first day    }
  169.  CT_7MON        = 1;       { 7 days a week, Monday is the first day    }
  170.  CT_7TUE        = 2;       { 7 days a week, Tuesday is the first day   }
  171.  CT_7WED        = 3;       { 7 days a week, Wednesday is the first day }
  172.  CT_7THU        = 4;       { 7 days a week, Thursday is the first day  }
  173.  CT_7FRI        = 5;       { 7 days a week, Friday is the first day    }
  174.  CT_7SAT        = 6;       { 7 days a week, Saturday is the first day  }
  175.  
  176. { constants for Locale.loc_MonPositiveSpaceSep and Locale.loc_MonNegativeSpaceSep }
  177.  SS_NOSPACE     = 0;       { cur. symbol is NOT separated from value with a space }
  178.  SS_SPACE       = 1;       { cur. symbol IS separated from value with a space     }
  179.  
  180. { constants for Locale.loc_MonPositiveSignPos and Locale.loc_MonNegativeSignPos }
  181.  SP_PARENS      = 0;       { () surround the quantity and currency_symbol   }
  182.  SP_PREC_ALL    = 1;       { sign string comes before amount and symbol     }
  183.  SP_SUCC_ALL    = 2;       { sign string comes after amount and symbol      }
  184.  SP_PREC_CURR   = 3;       { sign string comes right before currency symbol }
  185.  SP_SUCC_CURR   = 4;       { sign string comes right after currency symbol  }
  186.  
  187. { constants for Locale.loc_MonPositiveCSPos and Locale.loc_MonNegativeCSPos }
  188.  CSP_PRECEDES   = 0;  { currency symbol comes before value }
  189.  CSP_SUCCEEDS   = 1;  { currency symbol comes after value  }
  190.  
  191. { elements of the byte arrays pointed to by:
  192.  *   Locale.loc_Grouping
  193.  *   Locale.loc_FracGrouping
  194.  *   Locale.loc_MonGrouping
  195.  *   Locale.loc_MonFracGrouping
  196.  * are interpreted as follows:
  197.  *
  198.  *    255     indicates that no further grouping is to be performed
  199.  *    0       indicates that the previous element is to be repeatedly used
  200.  *            for the remainder of the digits
  201.  *    <other> the number of digits that comprises the current group
  202.  }
  203.  
  204.  
  205. {***************************************************************************}
  206.  
  207.  
  208. { Tags for OpenCatalog() }
  209.  OC_TagBase         = (TAG_USER + $90000);
  210.  OC_BuiltInLanguage = OC_TagBase+1;   { language of built-in strings    }
  211.  OC_BuiltInCodeSet  = OC_TagBase+2;   { code set of built-in strings    }
  212.  OC_Version         = OC_TagBase+3;   { catalog version number required }
  213.  OC_Language        = OC_TagBase+4;   { preferred language of catalog   }
  214.  
  215.  
  216. {***************************************************************************}
  217.  
  218.  
  219. { Comparison types for StrnCmp() }
  220.  SC_ASCII    = 0;
  221.  SC_COLLATE1 = 1;
  222.  SC_COLLATE2 = 2;
  223.  
  224.  
  225. {***************************************************************************}
  226.  
  227. Type
  228. { This structure must only be allocated by locale.library and is READ-ONLY! }
  229.  pCatalog = ^tCatalog;
  230.  tCatalog = record
  231.     cat_Link    : tNode;        { for internal linkage    }
  232.     cat_Pad     : WORD;         { to longword align       }
  233.     cat_Language: STRPTR;       { language of the catalog }
  234.     cat_CodeSet : ULONG;        { currently always 0      }
  235.     cat_Version : WORD;         { version of the catalog  }
  236.     cat_Revision: WORD;         { revision of the catalog }
  237.  end;
  238.  
  239. {***************************************************************************}
  240.  
  241. { --- functions in V38 or higher (Release 2.1) --- }
  242.  
  243. VAR LocaleBase : pLocaleBase;
  244.  
  245. PROCEDURE CloseCatalog(catalog : pCatalog);
  246. PROCEDURE CloseLocale(locale : pLocale);
  247. FUNCTION ConvToLower(locale : pLocale; character : ULONG) : ULONG;
  248. FUNCTION ConvToUpper(locale : pLocale; character : ULONG) : ULONG;
  249. PROCEDURE FormatDate(locale : pLocale; fmtTemplate : pCHAR; date : pDateStamp; putCharFunc : pHook);
  250. FUNCTION FormatString(locale : pLocale; fmtTemplate : pCHAR; dataStream : POINTER; putCharFunc : pHook) : POINTER;
  251. FUNCTION GetCatalogStr(catalog : pCatalog; stringNum : LONGINT; defaultString : pCHAR) : pCHAR;
  252. FUNCTION GetLocaleStr(locale : pLocale; stringNum : ULONG) : pCHAR;
  253. FUNCTION IsAlNum(locale : pLocale; character : ULONG) : BOOLEAN;
  254. FUNCTION IsAlpha(locale : pLocale; character : ULONG) : BOOLEAN;
  255. FUNCTION IsCntrl(locale : pLocale; character : ULONG) : BOOLEAN;
  256. FUNCTION IsDigit(locale : pLocale; character : ULONG) : BOOLEAN;
  257. FUNCTION IsGraph(locale : pLocale; character : ULONG) : BOOLEAN;
  258. FUNCTION IsLower(locale : pLocale; character : ULONG) : BOOLEAN;
  259. FUNCTION IsPrint(locale : pLocale; character : ULONG) : BOOLEAN;
  260. FUNCTION IsPunct(locale : pLocale; character : ULONG) : BOOLEAN;
  261. FUNCTION IsSpace(locale : pLocale; character : ULONG) : BOOLEAN;
  262. FUNCTION IsUpper(locale : pLocale; character : ULONG) : BOOLEAN;
  263. FUNCTION IsXDigit(locale : pLocale; character : ULONG) : BOOLEAN;
  264. FUNCTION OpenCatalogA(locale : pLocale; name : pCHAR; tags : pTagItem) : pCatalog;
  265. FUNCTION OpenLocale(name : pCHAR) : pLocale;
  266. FUNCTION ParseDate(locale : pLocale; date : pDateStamp; fmtTemplate : pCHAR; getCharFunc : pHook) : BOOLEAN;
  267. FUNCTION StrConvert(locale : pLocale; string1 : pCHAR; buffer : POINTER; bufferSize : ULONG; typ : ULONG) : ULONG;
  268. FUNCTION StrnCmp(locale : pLocale; string1 : pCHAR; string2 : pCHAR; length : LONGINT; typ : ULONG) : LONGINT;
  269.  
  270. IMPLEMENTATION
  271.  
  272. PROCEDURE CloseCatalog(catalog : pCatalog);
  273. BEGIN
  274.   ASM
  275.     MOVE.L  A6,-(A7)
  276.     MOVEA.L catalog,A0
  277.     MOVEA.L LocaleBase,A6
  278.     JSR -036(A6)
  279.     MOVEA.L (A7)+,A6
  280.   END;
  281. END;
  282.  
  283. PROCEDURE CloseLocale(locale : pLocale);
  284. BEGIN
  285.   ASM
  286.     MOVE.L  A6,-(A7)
  287.     MOVEA.L locale,A0
  288.     MOVEA.L LocaleBase,A6
  289.     JSR -042(A6)
  290.     MOVEA.L (A7)+,A6
  291.   END;
  292. END;
  293.  
  294. FUNCTION ConvToLower(locale : pLocale; character : ULONG) : ULONG;
  295. BEGIN
  296.   ASM
  297.     MOVE.L  A6,-(A7)
  298.     MOVEA.L locale,A0
  299.     MOVE.L  character,D0
  300.     MOVEA.L LocaleBase,A6
  301.     JSR -048(A6)
  302.     MOVEA.L (A7)+,A6
  303.     MOVE.L  D0,@RESULT
  304.   END;
  305. END;
  306.  
  307. FUNCTION ConvToUpper(locale : pLocale; character : ULONG) : ULONG;
  308. BEGIN
  309.   ASM
  310.     MOVE.L  A6,-(A7)
  311.     MOVEA.L locale,A0
  312.     MOVE.L  character,D0
  313.     MOVEA.L LocaleBase,A6
  314.     JSR -054(A6)
  315.     MOVEA.L (A7)+,A6
  316.     MOVE.L  D0,@RESULT
  317.   END;
  318. END;
  319.  
  320. PROCEDURE FormatDate(locale : pLocale; fmtTemplate : pCHAR; date : pDateStamp; putCharFunc : pHook);
  321. BEGIN
  322.   ASM
  323.     MOVE.L  A6,-(A7)
  324.     MOVEA.L locale,A0
  325.     MOVEA.L fmtTemplate,A1
  326.     MOVEA.L date,A2
  327.     MOVEA.L putCharFunc,A3
  328.     MOVEA.L LocaleBase,A6
  329.     JSR -060(A6)
  330.     MOVEA.L (A7)+,A6
  331.   END;
  332. END;
  333.  
  334. FUNCTION FormatString(locale : pLocale; fmtTemplate : pCHAR; dataStream : POINTER; putCharFunc : pHook) : POINTER;
  335. BEGIN
  336.   ASM
  337.     MOVE.L  A6,-(A7)
  338.     MOVEA.L locale,A0
  339.     MOVEA.L fmtTemplate,A1
  340.     MOVEA.L dataStream,A2
  341.     MOVEA.L putCharFunc,A3
  342.     MOVEA.L LocaleBase,A6
  343.     JSR -066(A6)
  344.     MOVEA.L (A7)+,A6
  345.     MOVE.L  D0,@RESULT
  346.   END;
  347. END;
  348.  
  349. FUNCTION GetCatalogStr(catalog : pCatalog; stringNum : LONGINT; defaultString : pCHAR) : pCHAR;
  350. BEGIN
  351.   ASM
  352.     MOVE.L  A6,-(A7)
  353.     MOVEA.L catalog,A0
  354.     MOVE.L  stringNum,D0
  355.     MOVEA.L defaultString,A1
  356.     MOVEA.L LocaleBase,A6
  357.     JSR -072(A6)
  358.     MOVEA.L (A7)+,A6
  359.     MOVE.L  D0,@RESULT
  360.   END;
  361. END;
  362.  
  363. FUNCTION GetLocaleStr(locale : pLocale; stringNum : ULONG) : pCHAR;
  364. BEGIN
  365.   ASM
  366.     MOVE.L  A6,-(A7)
  367.     MOVEA.L locale,A0
  368.     MOVE.L  stringNum,D0
  369.     MOVEA.L LocaleBase,A6
  370.     JSR -078(A6)
  371.     MOVEA.L (A7)+,A6
  372.     MOVE.L  D0,@RESULT
  373.   END;
  374. END;
  375.  
  376. FUNCTION IsAlNum(locale : pLocale; character : ULONG) : BOOLEAN;
  377. BEGIN
  378.   ASM
  379.     MOVE.L  A6,-(A7)
  380.     MOVEA.L locale,A0
  381.     MOVE.L  character,D0
  382.     MOVEA.L LocaleBase,A6
  383.     JSR -084(A6)
  384.     MOVEA.L (A7)+,A6
  385.     TST.W   D0
  386.     BEQ.B   @end
  387.     MOVEQ   #1,D0
  388.   @end: MOVE.B  D0,@RESULT
  389.   END;
  390. END;
  391.  
  392. FUNCTION IsAlpha(locale : pLocale; character : ULONG) : BOOLEAN;
  393. BEGIN
  394.   ASM
  395.     MOVE.L  A6,-(A7)
  396.     MOVEA.L locale,A0
  397.     MOVE.L  character,D0
  398.     MOVEA.L LocaleBase,A6
  399.     JSR -090(A6)
  400.     MOVEA.L (A7)+,A6
  401.     TST.W   D0
  402.     BEQ.B   @end
  403.     MOVEQ   #1,D0
  404.   @end: MOVE.B  D0,@RESULT
  405.   END;
  406. END;
  407.  
  408. FUNCTION IsCntrl(locale : pLocale; character : ULONG) : BOOLEAN;
  409. BEGIN
  410.   ASM
  411.     MOVE.L  A6,-(A7)
  412.     MOVEA.L locale,A0
  413.     MOVE.L  character,D0
  414.     MOVEA.L LocaleBase,A6
  415.     JSR -096(A6)
  416.     MOVEA.L (A7)+,A6
  417.     TST.W   D0
  418.     BEQ.B   @end
  419.     MOVEQ   #1,D0
  420.   @end: MOVE.B  D0,@RESULT
  421.   END;
  422. END;
  423.  
  424. FUNCTION IsDigit(locale : pLocale; character : ULONG) : BOOLEAN;
  425. BEGIN
  426.   ASM
  427.     MOVE.L  A6,-(A7)
  428.     MOVEA.L locale,A0
  429.     MOVE.L  character,D0
  430.     MOVEA.L LocaleBase,A6
  431.     JSR -102(A6)
  432.     MOVEA.L (A7)+,A6
  433.     TST.W   D0
  434.     BEQ.B   @end
  435.     MOVEQ   #1,D0
  436.   @end: MOVE.B  D0,@RESULT
  437.   END;
  438. END;
  439.  
  440. FUNCTION IsGraph(locale : pLocale; character : ULONG) : BOOLEAN;
  441. BEGIN
  442.   ASM
  443.     MOVE.L  A6,-(A7)
  444.     MOVEA.L locale,A0
  445.     MOVE.L  character,D0
  446.     MOVEA.L LocaleBase,A6
  447.     JSR -108(A6)
  448.     MOVEA.L (A7)+,A6
  449.     TST.W   D0
  450.     BEQ.B   @end
  451.     MOVEQ   #1,D0
  452.   @end: MOVE.B  D0,@RESULT
  453.   END;
  454. END;
  455.  
  456. FUNCTION IsLower(locale : pLocale; character : ULONG) : BOOLEAN;
  457. BEGIN
  458.   ASM
  459.     MOVE.L  A6,-(A7)
  460.     MOVEA.L locale,A0
  461.     MOVE.L  character,D0
  462.     MOVEA.L LocaleBase,A6
  463.     JSR -114(A6)
  464.     MOVEA.L (A7)+,A6
  465.     TST.W   D0
  466.     BEQ.B   @end
  467.     MOVEQ   #1,D0
  468.   @end: MOVE.B  D0,@RESULT
  469.   END;
  470. END;
  471.  
  472. FUNCTION IsPrint(locale : pLocale; character : ULONG) : BOOLEAN;
  473. BEGIN
  474.   ASM
  475.     MOVE.L  A6,-(A7)
  476.     MOVEA.L locale,A0
  477.     MOVE.L  character,D0
  478.     MOVEA.L LocaleBase,A6
  479.     JSR -120(A6)
  480.     MOVEA.L (A7)+,A6
  481.     TST.W   D0
  482.     BEQ.B   @end
  483.     MOVEQ   #1,D0
  484.   @end: MOVE.B  D0,@RESULT
  485.   END;
  486. END;
  487.  
  488. FUNCTION IsPunct(locale : pLocale; character : ULONG) : BOOLEAN;
  489. BEGIN
  490.   ASM
  491.     MOVE.L  A6,-(A7)
  492.     MOVEA.L locale,A0
  493.     MOVE.L  character,D0
  494.     MOVEA.L LocaleBase,A6
  495.     JSR -126(A6)
  496.     MOVEA.L (A7)+,A6
  497.     TST.W   D0
  498.     BEQ.B   @end
  499.     MOVEQ   #1,D0
  500.   @end: MOVE.B  D0,@RESULT
  501.   END;
  502. END;
  503.  
  504. FUNCTION IsSpace(locale : pLocale; character : ULONG) : BOOLEAN;
  505. BEGIN
  506.   ASM
  507.     MOVE.L  A6,-(A7)
  508.     MOVEA.L locale,A0
  509.     MOVE.L  character,D0
  510.     MOVEA.L LocaleBase,A6
  511.     JSR -132(A6)
  512.     MOVEA.L (A7)+,A6
  513.     TST.W   D0
  514.     BEQ.B   @end
  515.     MOVEQ   #1,D0
  516.   @end: MOVE.B  D0,@RESULT
  517.   END;
  518. END;
  519.  
  520. FUNCTION IsUpper(locale : pLocale; character : ULONG) : BOOLEAN;
  521. BEGIN
  522.   ASM
  523.     MOVE.L  A6,-(A7)
  524.     MOVEA.L locale,A0
  525.     MOVE.L  character,D0
  526.     MOVEA.L LocaleBase,A6
  527.     JSR -138(A6)
  528.     MOVEA.L (A7)+,A6
  529.     TST.W   D0
  530.     BEQ.B   @end
  531.     MOVEQ   #1,D0
  532.   @end: MOVE.B  D0,@RESULT
  533.   END;
  534. END;
  535.  
  536. FUNCTION IsXDigit(locale : pLocale; character : ULONG) : BOOLEAN;
  537. BEGIN
  538.   ASM
  539.     MOVE.L  A6,-(A7)
  540.     MOVEA.L locale,A0
  541.     MOVE.L  character,D0
  542.     MOVEA.L LocaleBase,A6
  543.     JSR -144(A6)
  544.     MOVEA.L (A7)+,A6
  545.     TST.W   D0
  546.     BEQ.B   @end
  547.     MOVEQ   #1,D0
  548.   @end: MOVE.B  D0,@RESULT
  549.   END;
  550. END;
  551.  
  552. FUNCTION OpenCatalogA(locale : pLocale; name : pCHAR; tags : pTagItem) : pCatalog;
  553. BEGIN
  554.   ASM
  555.     MOVE.L  A6,-(A7)
  556.     MOVEA.L locale,A0
  557.     MOVEA.L name,A1
  558.     MOVEA.L tags,A2
  559.     MOVEA.L LocaleBase,A6
  560.     JSR -150(A6)
  561.     MOVEA.L (A7)+,A6
  562.     MOVE.L  D0,@RESULT
  563.   END;
  564. END;
  565.  
  566. FUNCTION OpenLocale(name : pCHAR) : pLocale;
  567. BEGIN
  568.   ASM
  569.     MOVE.L  A6,-(A7)
  570.     MOVEA.L name,A0
  571.     MOVEA.L LocaleBase,A6
  572.     JSR -156(A6)
  573.     MOVEA.L (A7)+,A6
  574.     MOVE.L  D0,@RESULT
  575.   END;
  576. END;
  577.  
  578. FUNCTION ParseDate(locale : pLocale; date : pDateStamp; fmtTemplate : pCHAR; getCharFunc : pHook) : BOOLEAN;
  579. BEGIN
  580.   ASM
  581.     MOVE.L  A6,-(A7)
  582.     MOVEA.L locale,A0
  583.     MOVEA.L date,A1
  584.     MOVEA.L fmtTemplate,A2
  585.     MOVEA.L getCharFunc,A3
  586.     MOVEA.L LocaleBase,A6
  587.     JSR -162(A6)
  588.     MOVEA.L (A7)+,A6
  589.     TST.W   D0
  590.     BEQ.B   @end
  591.     MOVEQ   #1,D0
  592.   @end: MOVE.B  D0,@RESULT
  593.   END;
  594. END;
  595.  
  596. FUNCTION StrConvert(locale : pLocale; string1 : pCHAR; buffer : POINTER; bufferSize : ULONG; typ : ULONG) : ULONG;
  597. BEGIN
  598.   ASM
  599.     MOVE.L  A6,-(A7)
  600.     MOVEA.L locale,A0
  601.     MOVEA.L string1,A1
  602.     MOVEA.L buffer,A2
  603.     MOVE.L  bufferSize,D0
  604.     MOVE.L  typ,D1
  605.     MOVEA.L LocaleBase,A6
  606.     JSR -174(A6)
  607.     MOVEA.L (A7)+,A6
  608.     MOVE.L  D0,@RESULT
  609.   END;
  610. END;
  611.  
  612. FUNCTION StrnCmp(locale : pLocale; string1 : pCHAR; string2 : pCHAR; length : LONGINT; typ : ULONG) : LONGINT;
  613. BEGIN
  614.   ASM
  615.     MOVE.L  A6,-(A7)
  616.     MOVEA.L locale,A0
  617.     MOVEA.L string1,A1
  618.     MOVEA.L string2,A2
  619.     MOVE.L  length,D0
  620.     MOVE.L  typ,D1
  621.     MOVEA.L LocaleBase,A6
  622.     JSR -180(A6)
  623.     MOVEA.L (A7)+,A6
  624.     MOVE.L  D0,@RESULT
  625.   END;
  626. END;
  627.  
  628. END. (* UNIT LOCALE *)
  629.